<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>InFact: src/infact/environment.h Source File</title>

<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css" />

<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
  $(document).ready(function() { searchBox.OnSelectItem(0); });
</script>

</head>
<body>
<div id="top"><!-- do not remove this div! -->


<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  
  
  <td style="padding-left: 0.5em;">
   <div id="projectname">InFact
   
   </div>
   <div id="projectbrief">Interpreter and factory for easily creating C++ objects at run-time</div>
  </td>
  
  
  
 </tr>
 </tbody>
</table>
</div>

<!-- Generated by Doxygen 1.7.6.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
      </li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>File&#160;Members</span></a></li>
    </ul>
  </div>
</div>
<div class="header">
  <div class="headertitle">
<div class="title">src/infact/environment.h</div>  </div>
</div><!--header-->
<div class="contents">
<a href="environment_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">// Copyright 2014, Google Inc.</span>
<a name="l00002"></a>00002 <span class="comment">// All rights reserved.</span>
<a name="l00003"></a>00003 <span class="comment">//</span>
<a name="l00004"></a>00004 <span class="comment">// Redistribution and use in source and binary forms, with or without</span>
<a name="l00005"></a>00005 <span class="comment">// modification, are permitted provided that the following conditions are</span>
<a name="l00006"></a>00006 <span class="comment">// met:</span>
<a name="l00007"></a>00007 <span class="comment">//</span>
<a name="l00008"></a>00008 <span class="comment">//   * Redistributions of source code must retain the above copyright</span>
<a name="l00009"></a>00009 <span class="comment">//     notice, this list of conditions and the following disclaimer.</span>
<a name="l00010"></a>00010 <span class="comment">//   * Redistributions in binary form must reproduce the above</span>
<a name="l00011"></a>00011 <span class="comment">//     copyright notice, this list of conditions and the following disclaimer</span>
<a name="l00012"></a>00012 <span class="comment">//     in the documentation and/or other materials provided with the</span>
<a name="l00013"></a>00013 <span class="comment">//     distribution.</span>
<a name="l00014"></a>00014 <span class="comment">//   * Neither the name of Google Inc. nor the names of its</span>
<a name="l00015"></a>00015 <span class="comment">//     contributors may be used to endorse or promote products derived from</span>
<a name="l00016"></a>00016 <span class="comment">//     this software without specific prior written permission.</span>
<a name="l00017"></a>00017 <span class="comment">//</span>
<a name="l00018"></a>00018 <span class="comment">// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS</span>
<a name="l00019"></a>00019 <span class="comment">// &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT</span>
<a name="l00020"></a>00020 <span class="comment">// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR</span>
<a name="l00021"></a>00021 <span class="comment">// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT</span>
<a name="l00022"></a>00022 <span class="comment">// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,</span>
<a name="l00023"></a>00023 <span class="comment">// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT</span>
<a name="l00024"></a>00024 <span class="comment">// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,</span>
<a name="l00025"></a>00025 <span class="comment">// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY</span>
<a name="l00026"></a>00026 <span class="comment">// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT</span>
<a name="l00027"></a>00027 <span class="comment">// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE</span>
<a name="l00028"></a>00028 <span class="comment">// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span>
<a name="l00029"></a>00029 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00030"></a>00030 <span class="comment">//</span>
<a name="l00031"></a>00031 <span class="comment">//</span>
<a name="l00038"></a>00038 <span class="comment"></span>
<a name="l00039"></a>00039 <span class="preprocessor">#ifndef INFACT_ENVIRONMENT_H_</span>
<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#define INFACT_ENVIRONMENT_H_</span>
<a name="l00041"></a>00041 <span class="preprocessor"></span>
<a name="l00042"></a><a class="code" href="environment_8h.html#abeee3249a73d20ce434d64f7ce0767cb">00042</a> <span class="preprocessor">#define VAR_MAP_DEBUG 0</span>
<a name="l00043"></a>00043 <span class="preprocessor"></span>
<a name="l00044"></a>00044 <span class="preprocessor">#include &lt;sstream&gt;</span>
<a name="l00045"></a>00045 <span class="preprocessor">#include &lt;vector&gt;</span>
<a name="l00046"></a>00046 
<a name="l00047"></a>00047 <span class="preprocessor">#include &quot;<a class="code" href="error_8h.html" title="Provides an error handling function that optionally throws an exception.">error.h</a>&quot;</span>
<a name="l00048"></a>00048 <span class="preprocessor">#include &quot;<a class="code" href="stream-init_8h.html" title="Provides a generic dynamic object factory.">stream-init.h</a>&quot;</span>
<a name="l00049"></a>00049 <span class="preprocessor">#include &quot;<a class="code" href="stream-tokenizer_8h.html" title="Provides the StreamTokenizer  class.">stream-tokenizer.h</a>&quot;</span>
<a name="l00050"></a>00050 
<a name="l00051"></a>00051 <span class="keyword">namespace </span>infact {
<a name="l00052"></a>00052 
<a name="l00053"></a>00053 <span class="keyword">using</span> std::cerr;
<a name="l00054"></a>00054 <span class="keyword">using</span> std::endl;
<a name="l00055"></a>00055 <span class="keyword">using</span> std::ostream;
<a name="l00056"></a>00056 <span class="keyword">using</span> std::ostringstream;
<a name="l00057"></a>00057 <span class="keyword">using</span> std::shared_ptr;
<a name="l00058"></a>00058 <span class="keyword">using</span> std::unordered_map;
<a name="l00059"></a>00059 <span class="keyword">using</span> std::unordered_set;
<a name="l00060"></a>00060 <span class="keyword">using</span> std::vector;
<a name="l00061"></a>00061 
<a name="l00062"></a>00062 <span class="keyword">class </span>Environment;
<a name="l00063"></a>00063 
<a name="l00066"></a><a class="code" href="classinfact_1_1_var_map_base.html">00066</a> <span class="keyword">class </span><a class="code" href="classinfact_1_1_var_map_base.html" title="A base class for a mapping from variables of a specific type to their values.">VarMapBase</a> {
<a name="l00067"></a>00067  <span class="keyword">public</span>:
<a name="l00076"></a><a class="code" href="classinfact_1_1_var_map_base.html#ad77911e424e70354237ca07bc80259da">00076</a>   <a class="code" href="classinfact_1_1_var_map_base.html#ad77911e424e70354237ca07bc80259da" title="Constructs a base class for a concrete implementation providing a mapping from variables of a particu...">VarMapBase</a>(<span class="keyword">const</span> <span class="keywordtype">string</span> &amp;name, <a class="code" href="classinfact_1_1_environment.html" title="An interface for an environment in which variables of various types are mapped to their values...">Environment</a> *env, <span class="keywordtype">bool</span> is_primitive) :
<a name="l00077"></a>00077       <a class="code" href="classinfact_1_1_var_map_base.html#ab342cd8ad0b5e12930f8422ecd31e142" title="The type name of this VarMap.">name_</a>(name), <a class="code" href="classinfact_1_1_var_map_base.html#afd33e708402ca6363d058b1bde7f4b50" title="The Environment that holds this VarMap instance.">env_</a>(env), <a class="code" href="classinfact_1_1_var_map_base.html#a8f4953a83196df9e3a200ee4c76569cb" title="Whether this VarMap instance holds variables of primitive type or vector of primitives.">is_primitive_</a>(is_primitive) { }
<a name="l00078"></a>00078 
<a name="l00079"></a><a class="code" href="classinfact_1_1_var_map_base.html#ae5698dbf907cbf0956e33c8345e44fdd">00079</a>   <span class="keyword">virtual</span> <a class="code" href="classinfact_1_1_var_map_base.html#ae5698dbf907cbf0956e33c8345e44fdd">~VarMapBase</a>() { }
<a name="l00080"></a>00080 
<a name="l00083"></a><a class="code" href="classinfact_1_1_var_map_base.html#a0f9eff0835f90ab0df91e1cc9509e1ac">00083</a>   <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classinfact_1_1_var_map_base.html#a0f9eff0835f90ab0df91e1cc9509e1ac" title="Returns whether this instance contains primitive or primtive vector variables.">IsPrimitive</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classinfact_1_1_var_map_base.html#a8f4953a83196df9e3a200ee4c76569cb" title="Whether this VarMap instance holds variables of primitive type or vector of primitives.">is_primitive_</a>; }
<a name="l00084"></a>00084 
<a name="l00086"></a><a class="code" href="classinfact_1_1_var_map_base.html#a877c8828eb0289a0f90b37a848f3a28d">00086</a>   <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">string</span> &amp;<a class="code" href="classinfact_1_1_var_map_base.html#a877c8828eb0289a0f90b37a848f3a28d" title="Returns the type name of the variables of this instance.">Name</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classinfact_1_1_var_map_base.html#ab342cd8ad0b5e12930f8422ecd31e142" title="The type name of this VarMap.">name_</a>; }
<a name="l00087"></a>00087 
<a name="l00090"></a>00090   <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classinfact_1_1_var_map_base.html#ad6f73c0907135b00d2e635c6d54a8a12" title="Returns whether the specified variable has a definition in this environment.">Defined</a>(<span class="keyword">const</span> <span class="keywordtype">string</span> &amp;varname) <span class="keyword">const</span> = 0;
<a name="l00091"></a>00091 
<a name="l00096"></a>00096   <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classinfact_1_1_var_map_base.html#ac1c1fe930d681a601f4f281876fa5f63" title="Reads the next value (primitive or spec for constructing a Factory-constructible object) from the spe...">ReadAndSet</a>(<span class="keyword">const</span> <span class="keywordtype">string</span> &amp;varname, <a class="code" href="classinfact_1_1_stream_tokenizer.html" title="A simple class for tokenizing a stream of tokens for the formally specified language used to construc...">StreamTokenizer</a> &amp;st) = 0;
<a name="l00097"></a>00097 
<a name="l00101"></a>00101   <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classinfact_1_1_var_map_base.html#a238bc7a27b8c69505e5ae6ddf5ee0738" title="Prints out a human-readable string to the specified output stream containing the variables, their type and, if primitive, their values.">Print</a>(ostream &amp;os) <span class="keyword">const</span> = 0;
<a name="l00102"></a>00102 
<a name="l00104"></a>00104   <span class="keyword">virtual</span> <a class="code" href="classinfact_1_1_var_map_base.html" title="A base class for a mapping from variables of a specific type to their values.">VarMapBase</a> *<a class="code" href="classinfact_1_1_var_map_base.html#a2f703c07a28fee226c76039cbb038b78" title="Returns a newly constructed copy of this VarMap.">Copy</a>(<a class="code" href="classinfact_1_1_environment.html" title="An interface for an environment in which variables of various types are mapped to their values...">Environment</a> *env) <span class="keyword">const</span> = 0;
<a name="l00105"></a>00105 
<a name="l00106"></a>00106  <span class="keyword">protected</span>:
<a name="l00109"></a><a class="code" href="classinfact_1_1_var_map_base.html#a38160369437fc436f17cc288c2294c33">00109</a>   <span class="keywordtype">void</span> <a class="code" href="classinfact_1_1_var_map_base.html#a38160369437fc436f17cc288c2294c33" title="To allow proper implementation of Copy in VarMapBase implementation, since we don&#39;t get copying of ba...">SetMembers</a>(<span class="keyword">const</span> <span class="keywordtype">string</span> &amp;name, <a class="code" href="classinfact_1_1_environment.html" title="An interface for an environment in which variables of various types are mapped to their values...">Environment</a> *env, <span class="keywordtype">bool</span> is_primitive) {
<a name="l00110"></a>00110     <a class="code" href="classinfact_1_1_var_map_base.html#ab342cd8ad0b5e12930f8422ecd31e142" title="The type name of this VarMap.">name_</a> = name;
<a name="l00111"></a>00111     <a class="code" href="classinfact_1_1_var_map_base.html#afd33e708402ca6363d058b1bde7f4b50" title="The Environment that holds this VarMap instance.">env_</a> = env;
<a name="l00112"></a>00112     <a class="code" href="classinfact_1_1_var_map_base.html#a8f4953a83196df9e3a200ee4c76569cb" title="Whether this VarMap instance holds variables of primitive type or vector of primitives.">is_primitive_</a> = is_primitive;
<a name="l00113"></a>00113   }
<a name="l00114"></a>00114 
<a name="l00116"></a><a class="code" href="classinfact_1_1_var_map_base.html#ab342cd8ad0b5e12930f8422ecd31e142">00116</a>   <span class="keywordtype">string</span> <a class="code" href="classinfact_1_1_var_map_base.html#ab342cd8ad0b5e12930f8422ecd31e142" title="The type name of this VarMap.">name_</a>;
<a name="l00118"></a><a class="code" href="classinfact_1_1_var_map_base.html#afd33e708402ca6363d058b1bde7f4b50">00118</a>   <a class="code" href="classinfact_1_1_environment.html" title="An interface for an environment in which variables of various types are mapped to their values...">Environment</a> *<a class="code" href="classinfact_1_1_var_map_base.html#afd33e708402ca6363d058b1bde7f4b50" title="The Environment that holds this VarMap instance.">env_</a>;
<a name="l00121"></a><a class="code" href="classinfact_1_1_var_map_base.html#a8f4953a83196df9e3a200ee4c76569cb">00121</a>   <span class="keywordtype">bool</span> <a class="code" href="classinfact_1_1_var_map_base.html#a8f4953a83196df9e3a200ee4c76569cb" title="Whether this VarMap instance holds variables of primitive type or vector of primitives.">is_primitive_</a>;
<a name="l00122"></a>00122 };
<a name="l00123"></a>00123 
<a name="l00126"></a><a class="code" href="classinfact_1_1_environment.html">00126</a> <span class="keyword">class </span><a class="code" href="classinfact_1_1_environment.html" title="An interface for an environment in which variables of various types are mapped to their values...">Environment</a> {
<a name="l00127"></a>00127  <span class="keyword">public</span>:
<a name="l00128"></a><a class="code" href="classinfact_1_1_environment.html#af27e64c08b07affe9aaa4690f755859d">00128</a>   <span class="keyword">virtual</span> <a class="code" href="classinfact_1_1_environment.html#af27e64c08b07affe9aaa4690f755859d">~Environment</a>() { }
<a name="l00129"></a>00129 
<a name="l00132"></a>00132   <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classinfact_1_1_environment.html#a38809f4fd9d52f790abcec2c7aa169f8" title="Returns whether the specified variable has been defined in this environment.">Defined</a>(<span class="keyword">const</span> <span class="keywordtype">string</span> &amp;varname) <span class="keyword">const</span> = 0;
<a name="l00133"></a>00133 
<a name="l00136"></a>00136   <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classinfact_1_1_environment.html#aab3e8026af3825eb80cd54e89c9379bd" title="Sets the specified variable to the value obtained from the following tokens available from the specif...">ReadAndSet</a>(<span class="keyword">const</span> <span class="keywordtype">string</span> &amp;varname, <a class="code" href="classinfact_1_1_stream_tokenizer.html" title="A simple class for tokenizing a stream of tokens for the formally specified language used to construc...">StreamTokenizer</a> &amp;st,
<a name="l00137"></a>00137                           <span class="keyword">const</span> <span class="keywordtype">string</span> type = <span class="stringliteral">&quot;&quot;</span>) = 0;
<a name="l00138"></a>00138 
<a name="l00140"></a>00140   <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">string</span> &amp;<a class="code" href="classinfact_1_1_environment.html#a2ccb9f963c093da31f504bd4021682a5" title="Retrieves the type name of the specified variable.">GetType</a>(<span class="keyword">const</span> <span class="keywordtype">string</span> &amp;varname) <span class="keyword">const</span> = 0;
<a name="l00141"></a>00141 
<a name="l00143"></a>00143   <span class="keyword">virtual</span> <a class="code" href="classinfact_1_1_var_map_base.html" title="A base class for a mapping from variables of a specific type to their values.">VarMapBase</a> *<a class="code" href="classinfact_1_1_environment.html#a96f39caaea04c08e5da848f74e26927a" title="Retrieves the VarMap instance for the specified variable.">GetVarMap</a>(<span class="keyword">const</span> <span class="keywordtype">string</span> &amp;varname) = 0;
<a name="l00144"></a>00144 
<a name="l00163"></a>00163   <span class="keyword">virtual</span> <a class="code" href="classinfact_1_1_var_map_base.html" title="A base class for a mapping from variables of a specific type to their values.">VarMapBase</a> *<a class="code" href="classinfact_1_1_environment.html#a2b6540ed1500ea5cf0c04e9175fc76fa" title="Retrieves the VarMap instance for the specified type, or nullptr if there is no such VarMap...">GetVarMapForType</a>(<span class="keyword">const</span> <span class="keywordtype">string</span> &amp;type) = 0;
<a name="l00164"></a>00164 
<a name="l00167"></a>00167   <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classinfact_1_1_environment.html#a5771d2fcfc6804cb91a651b2df32effa" title="Prints a human-readable string of all the variables in this environment, their types and...">Print</a>(ostream &amp;os) <span class="keyword">const</span> = 0;
<a name="l00168"></a>00168 
<a name="l00170"></a>00170   <span class="keyword">virtual</span> <a class="code" href="classinfact_1_1_environment.html" title="An interface for an environment in which variables of various types are mapped to their values...">Environment</a> *<a class="code" href="classinfact_1_1_environment.html#ade64259636e7933ff9f02d46bda298e6" title="Returns a copy of this environment.">Copy</a>() <span class="keyword">const</span> = 0;
<a name="l00171"></a>00171 
<a name="l00175"></a>00175   <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classinfact_1_1_environment.html#a98abc4bc53e0223d005e5c66eb59cf70" title="Prints out a human-readable string with the names of all abstract base types and their concrete imple...">PrintFactories</a>(ostream &amp;os) <span class="keyword">const</span> = 0;
<a name="l00176"></a>00176 
<a name="l00178"></a>00178   <span class="keyword">static</span> <a class="code" href="classinfact_1_1_environment.html" title="An interface for an environment in which variables of various types are mapped to their values...">Environment</a> *<a class="code" href="classinfact_1_1_environment.html#ac155016aa1651ef2303906fa24976771" title="A static factory method to create a new, empty Environment instance.">CreateEmpty</a>();
<a name="l00179"></a>00179 };
<a name="l00180"></a>00180 
<a name="l00185"></a>00185 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;
<a name="l00186"></a><a class="code" href="classinfact_1_1_value_string.html">00186</a> <span class="keyword">class </span><a class="code" href="classinfact_1_1_value_string.html" title="A template class that helps print out values with ostream&amp; operator support and vectors of those valu...">ValueString</a> {
<a name="l00187"></a>00187  <span class="keyword">public</span>:
<a name="l00188"></a><a class="code" href="classinfact_1_1_value_string.html#a15c14a25cc82ea7c2cd89d0f5f294271">00188</a>   <span class="keywordtype">string</span> <a class="code" href="classinfact_1_1_value_string.html#a15c14a25cc82ea7c2cd89d0f5f294271">ToString</a>(<span class="keyword">const</span> T &amp;value)<span class="keyword"> const </span>{
<a name="l00189"></a>00189     ostringstream oss;
<a name="l00190"></a>00190     oss &lt;&lt; value;
<a name="l00191"></a>00191     <span class="keywordflow">return</span> oss.str();
<a name="l00192"></a>00192   }
<a name="l00193"></a>00193 };
<a name="l00194"></a>00194 
<a name="l00197"></a>00197 <span class="keyword">template</span>&lt;&gt;
<a name="l00198"></a><a class="code" href="classinfact_1_1_value_string_3_01string_01_4.html">00198</a> <span class="keyword">class </span><a class="code" href="classinfact_1_1_value_string.html" title="A template class that helps print out values with ostream&amp; operator support and vectors of those valu...">ValueString</a>&lt;string&gt; {
<a name="l00199"></a>00199  <span class="keyword">public</span>:
<a name="l00200"></a><a class="code" href="classinfact_1_1_value_string_3_01string_01_4.html#a939ee1ed2355a097ff1e2573b16907ed">00200</a>   <span class="keywordtype">string</span> <a class="code" href="classinfact_1_1_value_string_3_01string_01_4.html#a939ee1ed2355a097ff1e2573b16907ed">ToString</a>(<span class="keyword">const</span> <span class="keywordtype">string</span> &amp;value)<span class="keyword"> const </span>{
<a name="l00201"></a>00201     <span class="keywordflow">return</span> <span class="stringliteral">&quot;\&quot;&quot;</span> + value + <span class="stringliteral">&quot;\&quot;&quot;</span>;
<a name="l00202"></a>00202   }
<a name="l00203"></a>00203 };
<a name="l00204"></a>00204 
<a name="l00207"></a>00207 <span class="keyword">template</span>&lt;&gt;
<a name="l00208"></a><a class="code" href="classinfact_1_1_value_string_3_01bool_01_4.html">00208</a> <span class="keyword">class </span><a class="code" href="classinfact_1_1_value_string.html" title="A template class that helps print out values with ostream&amp; operator support and vectors of those valu...">ValueString</a>&lt;bool&gt; {
<a name="l00209"></a>00209  <span class="keyword">public</span>:
<a name="l00210"></a><a class="code" href="classinfact_1_1_value_string_3_01bool_01_4.html#af3158ed955d14a5c2ca791c5e5d33264">00210</a>   <span class="keywordtype">string</span> <a class="code" href="classinfact_1_1_value_string_3_01bool_01_4.html#af3158ed955d14a5c2ca791c5e5d33264">ToString</a>(<span class="keyword">const</span> <span class="keywordtype">bool</span> &amp;value)<span class="keyword"> const </span>{
<a name="l00211"></a>00211     <span class="keywordflow">return</span> value ? <span class="stringliteral">&quot;true&quot;</span> : <span class="stringliteral">&quot;false&quot;</span>;
<a name="l00212"></a>00212   }
<a name="l00213"></a>00213 };
<a name="l00214"></a>00214 
<a name="l00218"></a>00218 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;
<a name="l00219"></a><a class="code" href="classinfact_1_1_value_string_3_01shared__ptr_3_01_t_01_4_01_4.html">00219</a> <span class="keyword">class </span><a class="code" href="classinfact_1_1_value_string.html" title="A template class that helps print out values with ostream&amp; operator support and vectors of those valu...">ValueString</a>&lt;shared_ptr&lt;T&gt; &gt; {
<a name="l00220"></a>00220  <span class="keyword">public</span>:
<a name="l00221"></a><a class="code" href="classinfact_1_1_value_string_3_01shared__ptr_3_01_t_01_4_01_4.html#a63361ff8b3c77784f4b4465883e7e78b">00221</a>   <span class="keywordtype">string</span> <a class="code" href="classinfact_1_1_value_string_3_01shared__ptr_3_01_t_01_4_01_4.html#a63361ff8b3c77784f4b4465883e7e78b">ToString</a>(<span class="keyword">const</span> shared_ptr&lt;T&gt; &amp;value)<span class="keyword"> const </span>{
<a name="l00222"></a>00222     ostringstream oss;
<a name="l00223"></a>00223     oss &lt;&lt; <span class="stringliteral">&quot;&lt;&quot;</span> &lt;&lt; <span class="keyword">typeid</span>(shared_ptr&lt;T&gt;).name() &lt;&lt; <span class="stringliteral">&quot;:&quot;</span> &lt;&lt; value.get() &lt;&lt; <span class="stringliteral">&quot;&gt;&quot;</span>;
<a name="l00224"></a>00224     <span class="keywordflow">return</span> oss.str();
<a name="l00225"></a>00225   }
<a name="l00226"></a>00226 };
<a name="l00227"></a>00227 
<a name="l00232"></a>00232 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;
<a name="l00233"></a><a class="code" href="classinfact_1_1_value_string_3_01vector_3_01_t_01_4_01_4.html">00233</a> <span class="keyword">class </span><a class="code" href="classinfact_1_1_value_string.html" title="A template class that helps print out values with ostream&amp; operator support and vectors of those valu...">ValueString</a>&lt;vector&lt;T&gt; &gt; {
<a name="l00234"></a>00234  <span class="keyword">public</span>:
<a name="l00235"></a><a class="code" href="classinfact_1_1_value_string_3_01vector_3_01_t_01_4_01_4.html#abb51da3b85b8ceb383ce9d41743eb8a2">00235</a>   <span class="keywordtype">string</span> <a class="code" href="classinfact_1_1_value_string_3_01vector_3_01_t_01_4_01_4.html#abb51da3b85b8ceb383ce9d41743eb8a2">ToString</a>(<span class="keyword">const</span> vector&lt;T&gt; &amp;value)<span class="keyword"> const </span>{
<a name="l00236"></a>00236     ostringstream oss;
<a name="l00237"></a>00237     oss &lt;&lt; <span class="stringliteral">&quot;{&quot;</span>;
<a name="l00238"></a>00238     <span class="keyword">typename</span> vector&lt;T&gt;::const_iterator it = value.begin();
<a name="l00239"></a>00239     <a class="code" href="classinfact_1_1_value_string.html" title="A template class that helps print out values with ostream&amp; operator support and vectors of those valu...">ValueString&lt;T&gt;</a> value_string;
<a name="l00240"></a>00240     <span class="keywordflow">if</span> (it != value.end()) {
<a name="l00241"></a>00241       oss &lt;&lt; value_string.<a class="code" href="classinfact_1_1_value_string.html#a15c14a25cc82ea7c2cd89d0f5f294271">ToString</a>(*it);
<a name="l00242"></a>00242       ++it;
<a name="l00243"></a>00243     }
<a name="l00244"></a>00244     <span class="keywordflow">for</span> (; it != value.end(); ++it) {
<a name="l00245"></a>00245       oss &lt;&lt; <span class="stringliteral">&quot;, &quot;</span> &lt;&lt; value_string.<a class="code" href="classinfact_1_1_value_string.html#a15c14a25cc82ea7c2cd89d0f5f294271">ToString</a>(*it);
<a name="l00246"></a>00246     }
<a name="l00247"></a>00247     oss &lt;&lt; <span class="stringliteral">&quot;}&quot;</span>;
<a name="l00248"></a>00248     <span class="keywordflow">return</span> oss.str();
<a name="l00249"></a>00249   }
<a name="l00250"></a>00250 };
<a name="l00251"></a>00251 
<a name="l00265"></a>00265 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> Derived&gt;
<a name="l00266"></a><a class="code" href="classinfact_1_1_var_map_impl.html">00266</a> <span class="keyword">class </span><a class="code" href="classinfact_1_1_var_map_impl.html" title="A partial implementation of the VarMapBase interface that is common to both VarMap&lt;T&gt; and the VarMap&lt;...">VarMapImpl</a> : <span class="keyword">public</span> <a class="code" href="classinfact_1_1_var_map_base.html" title="A base class for a mapping from variables of a specific type to their values.">VarMapBase</a> {
<a name="l00267"></a>00267  <span class="keyword">public</span>:
<a name="l00268"></a><a class="code" href="classinfact_1_1_var_map_impl.html#a62772cae1750f255b4292a8aa3a000b4">00268</a>   <a class="code" href="classinfact_1_1_var_map_impl.html#a62772cae1750f255b4292a8aa3a000b4">VarMapImpl</a>(<span class="keyword">const</span> <span class="keywordtype">string</span> &amp;name, <a class="code" href="classinfact_1_1_environment.html" title="An interface for an environment in which variables of various types are mapped to their values...">Environment</a> *<a class="code" href="classinfact_1_1_var_map_impl.html#a08a42daedfe77f8a3b80bdc59c1c0754" title="A protected method to access the environment contained by this VarMapBase instance, for the two concrete VarMap implementations, below.">env</a>, <span class="keywordtype">bool</span> is_primitive = <span class="keyword">true</span>) :
<a name="l00269"></a>00269       <a class="code" href="classinfact_1_1_var_map_base.html" title="A base class for a mapping from variables of a specific type to their values.">VarMapBase</a>(name, env, is_primitive) { }
<a name="l00270"></a>00270 
<a name="l00271"></a><a class="code" href="classinfact_1_1_var_map_impl.html#ae4d41541881e83f935b742f5462689d2">00271</a>   <span class="keyword">virtual</span> <a class="code" href="classinfact_1_1_var_map_impl.html#ae4d41541881e83f935b742f5462689d2">~VarMapImpl</a>() { }
<a name="l00272"></a>00272 
<a name="l00273"></a>00273   <span class="comment">// Accessor methods</span>
<a name="l00274"></a>00274 
<a name="l00280"></a><a class="code" href="classinfact_1_1_var_map_impl.html#a7995e8a182a980899b4a0c90eee0d110">00280</a>   <span class="keywordtype">bool</span> <a class="code" href="classinfact_1_1_var_map_impl.html#a7995e8a182a980899b4a0c90eee0d110" title="Assigns the value of the specified variable to the object pointed to by the value parameter...">Get</a>(<span class="keyword">const</span> <span class="keywordtype">string</span> &amp;varname, T *value)<span class="keyword"> const </span>{
<a name="l00281"></a>00281     <span class="keyword">typename</span> unordered_map&lt;string, T&gt;::const_iterator it = vars_.find(varname);
<a name="l00282"></a>00282     <span class="keywordflow">if</span> (it == vars_.end()) {
<a name="l00283"></a>00283       <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00284"></a>00284     } <span class="keywordflow">else</span> {
<a name="l00285"></a>00285       *value = it-&gt;second;
<a name="l00286"></a>00286       <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00287"></a>00287     }
<a name="l00288"></a>00288   }
<a name="l00289"></a>00289 
<a name="l00291"></a><a class="code" href="classinfact_1_1_var_map_impl.html#a50796df8a142b9b0fe94f41699c3bd94">00291</a>   <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classinfact_1_1_var_map_impl.html#a50796df8a142b9b0fe94f41699c3bd94">Defined</a>(<span class="keyword">const</span> <span class="keywordtype">string</span> &amp;varname)<span class="keyword"> const </span>{
<a name="l00292"></a>00292     <span class="keywordflow">return</span> vars_.find(varname) != vars_.end();
<a name="l00293"></a>00293   }
<a name="l00294"></a>00294 
<a name="l00296"></a><a class="code" href="classinfact_1_1_var_map_impl.html#a41079cce7547d72dec0a0e0bfbbd6d20">00296</a>   <span class="keywordtype">void</span> <a class="code" href="classinfact_1_1_var_map_impl.html#a41079cce7547d72dec0a0e0bfbbd6d20" title="Sets the specified variable to the specified value.">Set</a>(<span class="keyword">const</span> <span class="keywordtype">string</span> &amp;varname, T value) {
<a name="l00297"></a>00297     vars_[varname] = value;
<a name="l00298"></a>00298   }
<a name="l00299"></a>00299 
<a name="l00301"></a><a class="code" href="classinfact_1_1_var_map_impl.html#aca4fbe7a4eb8fe86c8509af9d9d3a053">00301</a>   <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classinfact_1_1_var_map_impl.html#aca4fbe7a4eb8fe86c8509af9d9d3a053">Print</a>(ostream &amp;os)<span class="keyword"> const </span>{
<a name="l00302"></a>00302     <a class="code" href="classinfact_1_1_value_string.html" title="A template class that helps print out values with ostream&amp; operator support and vectors of those valu...">ValueString&lt;T&gt;</a> value_string;
<a name="l00303"></a>00303     <span class="keywordflow">for</span> (<span class="keyword">typename</span> unordered_map&lt;string, T&gt;::const_iterator it = vars_.begin();
<a name="l00304"></a>00304          it != vars_.end(); ++it) {
<a name="l00305"></a>00305       <span class="keyword">const</span> T&amp; value = it-&gt;second;
<a name="l00306"></a>00306       os &lt;&lt; <a class="code" href="classinfact_1_1_var_map_base.html#a877c8828eb0289a0f90b37a848f3a28d" title="Returns the type name of the variables of this instance.">Name</a>() &lt;&lt; <span class="stringliteral">&quot; &quot;</span>
<a name="l00307"></a>00307          &lt;&lt; it-&gt;first
<a name="l00308"></a>00308          &lt;&lt; <span class="stringliteral">&quot; = &quot;</span>
<a name="l00309"></a>00309          &lt;&lt; value_string.<a class="code" href="classinfact_1_1_value_string.html#a15c14a25cc82ea7c2cd89d0f5f294271">ToString</a>(value)
<a name="l00310"></a>00310          &lt;&lt; <span class="stringliteral">&quot;;\n&quot;</span>;
<a name="l00311"></a>00311     }
<a name="l00312"></a>00312     os.flush();
<a name="l00313"></a>00313   }
<a name="l00314"></a>00314 
<a name="l00316"></a><a class="code" href="classinfact_1_1_var_map_impl.html#a130789d78a53d05d8bc081ea5b18c655">00316</a>   <span class="keyword">virtual</span> <a class="code" href="classinfact_1_1_var_map_base.html" title="A base class for a mapping from variables of a specific type to their values.">VarMapBase</a> *<a class="code" href="classinfact_1_1_var_map_impl.html#a130789d78a53d05d8bc081ea5b18c655">Copy</a>(<a class="code" href="classinfact_1_1_environment.html" title="An interface for an environment in which variables of various types are mapped to their values...">Environment</a> *<a class="code" href="classinfact_1_1_var_map_impl.html#a08a42daedfe77f8a3b80bdc59c1c0754" title="A protected method to access the environment contained by this VarMapBase instance, for the two concrete VarMap implementations, below.">env</a>)<span class="keyword"> const </span>{
<a name="l00317"></a>00317     <span class="comment">// Invoke Derived class&#39; copy constructor.</span>
<a name="l00318"></a>00318     <span class="keyword">const</span> Derived *derived = <span class="keyword">dynamic_cast&lt;</span><span class="keyword">const </span>Derived *<span class="keyword">&gt;</span>(<span class="keyword">this</span>);
<a name="l00319"></a>00319     <span class="keywordflow">if</span> (derived == <span class="keyword">nullptr</span>) {
<a name="l00320"></a>00320       <a class="code" href="namespaceinfact.html#a746fb382cf3fd6cf656f40669d90372c" title="Reports an error encountered during parsing and/or construction of an object.">Error</a>(<span class="stringliteral">&quot;bad dynamic cast&quot;</span>);
<a name="l00321"></a>00321     }
<a name="l00322"></a>00322     Derived *var_map_copy = <span class="keyword">new</span> Derived(*derived);
<a name="l00323"></a>00323     var_map_copy-&gt;SetMembers(<a class="code" href="classinfact_1_1_var_map_base.html#ab342cd8ad0b5e12930f8422ecd31e142" title="The type name of this VarMap.">name_</a>, env, <a class="code" href="classinfact_1_1_var_map_base.html#a8f4953a83196df9e3a200ee4c76569cb" title="Whether this VarMap instance holds variables of primitive type or vector of primitives.">is_primitive_</a>);
<a name="l00324"></a>00324     <span class="keywordflow">return</span> var_map_copy;
<a name="l00325"></a>00325   }
<a name="l00326"></a>00326  <span class="keyword">protected</span>:
<a name="l00329"></a><a class="code" href="classinfact_1_1_var_map_impl.html#abf54e90f199a4fd8ddb19d11114df76d">00329</a>   <span class="keywordtype">bool</span> <a class="code" href="classinfact_1_1_var_map_impl.html#abf54e90f199a4fd8ddb19d11114df76d" title="Checks if the next token is an identifier and is a variable in the environment, and, if so, sets varname to the variable&rsquo;s value.">ReadAndSetFromExistingVariable</a>(<span class="keyword">const</span> <span class="keywordtype">string</span> &amp;varname,
<a name="l00330"></a>00330                                       <a class="code" href="classinfact_1_1_stream_tokenizer.html" title="A simple class for tokenizing a stream of tokens for the formally specified language used to construc...">StreamTokenizer</a> &amp;st) {
<a name="l00331"></a>00331     <span class="keywordflow">if</span> (<a class="code" href="classinfact_1_1_var_map_impl.html#a08a42daedfe77f8a3b80bdc59c1c0754" title="A protected method to access the environment contained by this VarMapBase instance, for the two concrete VarMap implementations, below.">env</a>()-&gt;<a class="code" href="classinfact_1_1_var_map_impl.html#a50796df8a142b9b0fe94f41699c3bd94">Defined</a>(st.<a class="code" href="classinfact_1_1_stream_tokenizer.html#a61ec5de244a34de264e5b18e4809d753" title="Returns the next token that would be returned by the Next method.">Peek</a>())) {
<a name="l00332"></a>00332       <a class="code" href="classinfact_1_1_var_map_base.html" title="A base class for a mapping from variables of a specific type to their values.">VarMapBase</a> *var_map = <a class="code" href="classinfact_1_1_var_map_impl.html#a08a42daedfe77f8a3b80bdc59c1c0754" title="A protected method to access the environment contained by this VarMapBase instance, for the two concrete VarMap implementations, below.">env</a>()-&gt;<a class="code" href="classinfact_1_1_environment.html#a96f39caaea04c08e5da848f74e26927a" title="Retrieves the VarMap instance for the specified variable.">GetVarMap</a>(st.<a class="code" href="classinfact_1_1_stream_tokenizer.html#a61ec5de244a34de264e5b18e4809d753" title="Returns the next token that would be returned by the Next method.">Peek</a>());
<a name="l00333"></a>00333       Derived *typed_var_map = <span class="keyword">dynamic_cast&lt;</span>Derived *<span class="keyword">&gt;</span>(var_map);
<a name="l00334"></a>00334       <span class="keywordflow">if</span> (typed_var_map != <span class="keyword">nullptr</span>) {
<a name="l00335"></a>00335         <span class="comment">// Finally consume variable.</span>
<a name="l00336"></a>00336         <span class="keywordtype">string</span> rhs_variable = st.<a class="code" href="classinfact_1_1_stream_tokenizer.html#ac6827f00a3da760e23241e890becee0c" title="Returns the next token in the token stream.">Next</a>();
<a name="l00337"></a>00337         T value = T();
<a name="l00338"></a>00338         <span class="comment">// Retrieve rhs variable&#39;s value.</span>
<a name="l00339"></a>00339         <span class="keywordtype">bool</span> success = typed_var_map-&gt;Get(rhs_variable, &amp;value);
<a name="l00340"></a>00340         <span class="comment">// Set varname to the same value.</span>
<a name="l00341"></a>00341         <span class="keywordflow">if</span> (<a class="code" href="environment_8h.html#abeee3249a73d20ce434d64f7ce0767cb">VAR_MAP_DEBUG</a> &gt;= 1) {
<a name="l00342"></a>00342           cerr &lt;&lt; <span class="stringliteral">&quot;VarMap&lt;&quot;</span> &lt;&lt; <a class="code" href="classinfact_1_1_var_map_base.html#a877c8828eb0289a0f90b37a848f3a28d" title="Returns the type name of the variables of this instance.">Name</a>() &lt;&lt; <span class="stringliteral">&quot;&gt;::ReadAndSet: &quot;</span>
<a name="l00343"></a>00343                &lt;&lt; <span class="stringliteral">&quot;setting variable &quot;</span>
<a name="l00344"></a>00344                &lt;&lt; varname &lt;&lt; <span class="stringliteral">&quot; to same value as rhs variable &quot;</span> &lt;&lt; rhs_variable
<a name="l00345"></a>00345                &lt;&lt; endl;
<a name="l00346"></a>00346         }
<a name="l00347"></a>00347         <span class="keywordflow">if</span> (success) {
<a name="l00348"></a>00348           <a class="code" href="classinfact_1_1_var_map_impl.html#a41079cce7547d72dec0a0e0bfbbd6d20" title="Sets the specified variable to the specified value.">Set</a>(varname, value);
<a name="l00349"></a>00349         } <span class="keywordflow">else</span> {
<a name="l00350"></a>00350           <span class="comment">// Error: we couldn&#39;t find the varname in this VarMap.</span>
<a name="l00351"></a>00351           <span class="keywordflow">if</span> (<a class="code" href="environment_8h.html#abeee3249a73d20ce434d64f7ce0767cb">VAR_MAP_DEBUG</a> &gt;= 1) {
<a name="l00352"></a>00352             cerr &lt;&lt; <span class="stringliteral">&quot;VarMap&lt;&quot;</span> &lt;&lt; <a class="code" href="classinfact_1_1_var_map_base.html#a877c8828eb0289a0f90b37a848f3a28d" title="Returns the type name of the variables of this instance.">Name</a>() &lt;&lt; <span class="stringliteral">&quot;&gt;::ReadAndSet: no variable &quot;</span>
<a name="l00353"></a>00353                  &lt;&lt; rhs_variable &lt;&lt; <span class="stringliteral">&quot; found &quot;</span> &lt;&lt; endl;
<a name="l00354"></a>00354           }
<a name="l00355"></a>00355         }
<a name="l00356"></a>00356       } <span class="keywordflow">else</span> {
<a name="l00357"></a>00357         <span class="comment">// Error: inferred or declared type of varname is different</span>
<a name="l00358"></a>00358         <span class="comment">// from the type of the rhs variable.</span>
<a name="l00359"></a>00359         <span class="keywordflow">if</span> (<a class="code" href="environment_8h.html#abeee3249a73d20ce434d64f7ce0767cb">VAR_MAP_DEBUG</a> &gt;= 1) {
<a name="l00360"></a>00360           cerr &lt;&lt; <span class="stringliteral">&quot;VarMap&lt;&quot;</span> &lt;&lt; <a class="code" href="classinfact_1_1_var_map_base.html#a877c8828eb0289a0f90b37a848f3a28d" title="Returns the type name of the variables of this instance.">Name</a>() &lt;&lt; <span class="stringliteral">&quot;&gt;::ReadAndSet: variable &quot;</span>
<a name="l00361"></a>00361                &lt;&lt; st.<a class="code" href="classinfact_1_1_stream_tokenizer.html#a61ec5de244a34de264e5b18e4809d753" title="Returns the next token that would be returned by the Next method.">Peek</a>() &lt;&lt; <span class="stringliteral">&quot; is of type &quot;</span> &lt;&lt; var_map-&gt;<a class="code" href="classinfact_1_1_var_map_base.html#a877c8828eb0289a0f90b37a848f3a28d" title="Returns the type name of the variables of this instance.">Name</a>()
<a name="l00362"></a>00362                &lt;&lt; <span class="stringliteral">&quot; but expecting &quot;</span> &lt;&lt; <span class="keyword">typeid</span>(T).name() &lt;&lt; endl;
<a name="l00363"></a>00363         }
<a name="l00364"></a>00364       }
<a name="l00365"></a>00365       <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00366"></a>00366     } <span class="keywordflow">else</span> {
<a name="l00367"></a>00367       <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00368"></a>00368     }
<a name="l00369"></a>00369   }
<a name="l00370"></a>00370 
<a name="l00373"></a><a class="code" href="classinfact_1_1_var_map_impl.html#a08a42daedfe77f8a3b80bdc59c1c0754">00373</a>   <a class="code" href="classinfact_1_1_environment.html" title="An interface for an environment in which variables of various types are mapped to their values...">Environment</a> *<a class="code" href="classinfact_1_1_var_map_impl.html#a08a42daedfe77f8a3b80bdc59c1c0754" title="A protected method to access the environment contained by this VarMapBase instance, for the two concrete VarMap implementations, below.">env</a>() { <span class="keywordflow">return</span> <a class="code" href="classinfact_1_1_var_map_base.html#afd33e708402ca6363d058b1bde7f4b50" title="The Environment that holds this VarMap instance.">VarMapBase::env_</a>; }
<a name="l00374"></a>00374 
<a name="l00375"></a>00375  <span class="keyword">private</span>:
<a name="l00376"></a>00376   unordered_map&lt;string, T&gt; vars_;
<a name="l00377"></a>00377 };
<a name="l00378"></a>00378 
<a name="l00383"></a>00383 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;
<a name="l00384"></a><a class="code" href="classinfact_1_1_var_map.html">00384</a> <span class="keyword">class </span><a class="code" href="classinfact_1_1_var_map.html" title="A container to hold the mapping between named variables of a specific type and their values...">VarMap</a> : <span class="keyword">public</span> <a class="code" href="classinfact_1_1_var_map_impl.html" title="A partial implementation of the VarMapBase interface that is common to both VarMap&lt;T&gt; and the VarMap&lt;...">VarMapImpl</a>&lt;T, VarMap&lt;T&gt; &gt; {
<a name="l00385"></a>00385  <span class="keyword">public</span>:
<a name="l00386"></a><a class="code" href="classinfact_1_1_var_map.html#a6c82259fd73281e220f6f9c8a291c409">00386</a>   <span class="keyword">typedef</span> <a class="code" href="classinfact_1_1_var_map_impl.html" title="A partial implementation of the VarMapBase interface that is common to both VarMap&lt;T&gt; and the VarMap&lt;...">VarMapImpl&lt;T, VarMap&lt;T&gt;</a> &gt; <a class="code" href="classinfact_1_1_var_map.html#a6c82259fd73281e220f6f9c8a291c409">Base</a>;
<a name="l00387"></a>00387 
<a name="l00395"></a><a class="code" href="classinfact_1_1_var_map.html#a4712a68e792eff0fa86474fbfcfaaaaa">00395</a>   <a class="code" href="classinfact_1_1_var_map.html#a4712a68e792eff0fa86474fbfcfaaaaa" title="Constructs a mapping from variables of a particular type to their values.">VarMap</a>(<span class="keyword">const</span> <span class="keywordtype">string</span> &amp;name, <a class="code" href="classinfact_1_1_environment.html" title="An interface for an environment in which variables of various types are mapped to their values...">Environment</a> *<a class="code" href="classinfact_1_1_var_map_impl.html#a08a42daedfe77f8a3b80bdc59c1c0754" title="A protected method to access the environment contained by this VarMapBase instance, for the two concrete VarMap implementations, below.">env</a>, <span class="keywordtype">bool</span> is_primitive = <span class="keyword">true</span>) :
<a name="l00396"></a>00396       <a class="code" href="classinfact_1_1_var_map_impl.html">Base</a>(name, env, is_primitive) { }
<a name="l00397"></a>00397 
<a name="l00398"></a><a class="code" href="classinfact_1_1_var_map.html#a6f59ca07646fd1d1c9dcf4153636fdbb">00398</a>   <span class="keyword">virtual</span> <a class="code" href="classinfact_1_1_var_map.html#a6f59ca07646fd1d1c9dcf4153636fdbb">~VarMap</a>() { }
<a name="l00399"></a>00399 
<a name="l00401"></a><a class="code" href="classinfact_1_1_var_map.html#aab6ba4cd688168427b3730f1a3efd205">00401</a>   <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classinfact_1_1_var_map.html#aab6ba4cd688168427b3730f1a3efd205">ReadAndSet</a>(<span class="keyword">const</span> <span class="keywordtype">string</span> &amp;varname, <a class="code" href="classinfact_1_1_stream_tokenizer.html" title="A simple class for tokenizing a stream of tokens for the formally specified language used to construc...">StreamTokenizer</a> &amp;st) {
<a name="l00402"></a>00402     <span class="keywordflow">if</span> (<a class="code" href="environment_8h.html#abeee3249a73d20ce434d64f7ce0767cb">VAR_MAP_DEBUG</a> &gt;= 1) {
<a name="l00403"></a>00403       cerr &lt;&lt; <span class="stringliteral">&quot;VarMap&lt;&quot;</span> &lt;&lt; <a class="code" href="classinfact_1_1_var_map_base.html#a877c8828eb0289a0f90b37a848f3a28d" title="Returns the type name of the variables of this instance.">Base::Name</a>() &lt;&lt; <span class="stringliteral">&quot;&gt;::ReadAndSet: &quot;</span>
<a name="l00404"></a>00404            &lt;&lt; <span class="stringliteral">&quot;about to set varname &quot;</span> &lt;&lt; varname &lt;&lt; <span class="stringliteral">&quot; of type &quot;</span>
<a name="l00405"></a>00405            &lt;&lt; <span class="keyword">typeid</span>(T).name()
<a name="l00406"></a>00406            &lt;&lt; <span class="stringliteral">&quot;; prev_token=&quot;</span> &lt;&lt; st.<a class="code" href="classinfact_1_1_stream_tokenizer.html#ac72a1a4fd331f44b850d2600a68a5063">PeekPrev</a>() &lt;&lt; <span class="stringliteral">&quot;; next_tok=&quot;</span> &lt;&lt; st.<a class="code" href="classinfact_1_1_stream_tokenizer.html#a61ec5de244a34de264e5b18e4809d753" title="Returns the next token that would be returned by the Next method.">Peek</a>()
<a name="l00407"></a>00407            &lt;&lt; endl;
<a name="l00408"></a>00408     }
<a name="l00409"></a>00409 
<a name="l00410"></a>00410     <span class="keywordflow">if</span> (!<a class="code" href="classinfact_1_1_var_map_impl.html#abf54e90f199a4fd8ddb19d11114df76d" title="Checks if the next token is an identifier and is a variable in the environment, and, if so, sets varname to the variable&rsquo;s value.">Base::ReadAndSetFromExistingVariable</a>(varname, st)) {
<a name="l00411"></a>00411       T value;
<a name="l00412"></a>00412       <a class="code" href="classinfact_1_1_initializer.html" title="A class to initialize a Factory-constructible object.">Initializer&lt;T&gt;</a> initializer(&amp;value);
<a name="l00413"></a>00413       initializer.<a class="code" href="classinfact_1_1_initializer.html#a84297ff40dc43faf6677d4dcd8fd2291">Init</a>(st, <a class="code" href="classinfact_1_1_var_map_impl.html#a08a42daedfe77f8a3b80bdc59c1c0754" title="A protected method to access the environment contained by this VarMapBase instance, for the two concrete VarMap implementations, below.">Base::env</a>());
<a name="l00414"></a>00414       this-&gt;<a class="code" href="classinfact_1_1_var_map_impl.html#a41079cce7547d72dec0a0e0bfbbd6d20" title="Sets the specified variable to the specified value.">Set</a>(varname, value);
<a name="l00415"></a>00415 
<a name="l00416"></a>00416       <span class="keywordflow">if</span> (<a class="code" href="environment_8h.html#abeee3249a73d20ce434d64f7ce0767cb">VAR_MAP_DEBUG</a> &gt;= 1) {
<a name="l00417"></a>00417         <a class="code" href="classinfact_1_1_value_string.html" title="A template class that helps print out values with ostream&amp; operator support and vectors of those valu...">ValueString&lt;T&gt;</a> value_string;
<a name="l00418"></a>00418         cerr &lt;&lt; <span class="stringliteral">&quot;VarMap&lt;&quot;</span> &lt;&lt; <a class="code" href="classinfact_1_1_var_map_base.html#a877c8828eb0289a0f90b37a848f3a28d" title="Returns the type name of the variables of this instance.">Base::Name</a>() &lt;&lt; <span class="stringliteral">&quot;&gt;::ReadAndSet: set varname &quot;</span>
<a name="l00419"></a>00419              &lt;&lt; varname &lt;&lt; <span class="stringliteral">&quot; to value &quot;</span> &lt;&lt; value_string.<a class="code" href="classinfact_1_1_value_string.html#a15c14a25cc82ea7c2cd89d0f5f294271">ToString</a>(value)&lt;&lt; endl;
<a name="l00420"></a>00420       }
<a name="l00421"></a>00421     }
<a name="l00422"></a>00422   }
<a name="l00423"></a>00423 };
<a name="l00424"></a>00424 
<a name="l00439"></a>00439 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;
<a name="l00440"></a><a class="code" href="classinfact_1_1_var_map_3_01vector_3_01_t_01_4_01_4.html">00440</a> <span class="keyword">class </span><a class="code" href="classinfact_1_1_var_map.html" title="A container to hold the mapping between named variables of a specific type and their values...">VarMap</a>&lt;vector&lt;T&gt; &gt; : <span class="keyword">public</span> <a class="code" href="classinfact_1_1_var_map_impl.html" title="A partial implementation of the VarMapBase interface that is common to both VarMap&lt;T&gt; and the VarMap&lt;...">VarMapImpl</a>&lt;vector&lt;T&gt;, VarMap&lt;vector&lt;T&gt; &gt; &gt; {
<a name="l00441"></a>00441  <span class="keyword">public</span>:
<a name="l00442"></a><a class="code" href="classinfact_1_1_var_map_3_01vector_3_01_t_01_4_01_4.html#a4ef89c32b47c209f4dc6ead48a184554">00442</a>   <span class="keyword">typedef</span> <a class="code" href="classinfact_1_1_var_map_impl.html" title="A partial implementation of the VarMapBase interface that is common to both VarMap&lt;T&gt; and the VarMap&lt;...">VarMapImpl&lt;vector&lt;T&gt;</a>, <a class="code" href="classinfact_1_1_var_map.html" title="A container to hold the mapping between named variables of a specific type and their values...">VarMap&lt;vector&lt;T&gt;</a> &gt; &gt; <a class="code" href="classinfact_1_1_var_map_3_01vector_3_01_t_01_4_01_4.html#a4ef89c32b47c209f4dc6ead48a184554">Base</a>;
<a name="l00443"></a>00443 
<a name="l00453"></a><a class="code" href="classinfact_1_1_var_map_3_01vector_3_01_t_01_4_01_4.html#a108dad6212a87c3784f84c8605a227bd">00453</a>   <a class="code" href="classinfact_1_1_var_map.html#a4712a68e792eff0fa86474fbfcfaaaaa" title="Constructs a mapping from variables of a particular type to their values.">VarMap</a>(<span class="keyword">const</span> <span class="keywordtype">string</span> &amp;name, <span class="keyword">const</span> <span class="keywordtype">string</span> &amp;element_typename, <a class="code" href="classinfact_1_1_environment.html" title="An interface for an environment in which variables of various types are mapped to their values...">Environment</a> *<a class="code" href="classinfact_1_1_var_map_impl.html#a08a42daedfe77f8a3b80bdc59c1c0754" title="A protected method to access the environment contained by this VarMapBase instance, for the two concrete VarMap implementations, below.">env</a>,
<a name="l00454"></a>00454          <span class="keywordtype">bool</span> is_primitive = <span class="keyword">true</span>)
<a name="l00455"></a>00455       : <a class="code" href="classinfact_1_1_var_map_impl.html">Base</a>(name, env, is_primitive), element_typename_(element_typename) { }
<a name="l00456"></a>00456 
<a name="l00457"></a><a class="code" href="classinfact_1_1_var_map_3_01vector_3_01_t_01_4_01_4.html#ab98f9f38dd7de0f59cee9dfd52863979">00457</a>   <span class="keyword">virtual</span> <a class="code" href="classinfact_1_1_var_map_3_01vector_3_01_t_01_4_01_4.html#ab98f9f38dd7de0f59cee9dfd52863979">~VarMap</a>() { }
<a name="l00458"></a>00458 
<a name="l00459"></a><a class="code" href="classinfact_1_1_var_map_3_01vector_3_01_t_01_4_01_4.html#ab04d2c8b1800f38e8f3a469fa5bb3e22">00459</a>   <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classinfact_1_1_var_map_3_01vector_3_01_t_01_4_01_4.html#ab04d2c8b1800f38e8f3a469fa5bb3e22" title="Reads the next value (primitive or spec for constructing a Factory-constructible object) from the spe...">ReadAndSet</a>(<span class="keyword">const</span> <span class="keywordtype">string</span> &amp;varname, <a class="code" href="classinfact_1_1_stream_tokenizer.html" title="A simple class for tokenizing a stream of tokens for the formally specified language used to construc...">StreamTokenizer</a> &amp;st) {
<a name="l00460"></a>00460     <span class="comment">// First check if next token is an identifier and is a variable in</span>
<a name="l00461"></a>00461     <span class="comment">// the environment, set varname to its value.</span>
<a name="l00462"></a>00462     <span class="keywordflow">if</span> (!<a class="code" href="classinfact_1_1_var_map_impl.html#abf54e90f199a4fd8ddb19d11114df76d" title="Checks if the next token is an identifier and is a variable in the environment, and, if so, sets varname to the variable&rsquo;s value.">Base::ReadAndSetFromExistingVariable</a>(varname, st)) {
<a name="l00463"></a>00463       <span class="comment">// This entire block reads the array of values.</span>
<a name="l00464"></a>00464 
<a name="l00465"></a>00465       <span class="comment">// Either the next token is an open brace (if reading tokens from</span>
<a name="l00466"></a>00466       <span class="comment">// within a Factory-constructible object&#39;s member init list), or</span>
<a name="l00467"></a>00467       <span class="comment">// else we just read an open brace (if Interpreter is reading tokens).</span>
<a name="l00468"></a>00468       <span class="keywordflow">if</span> (st.<a class="code" href="classinfact_1_1_stream_tokenizer.html#a61ec5de244a34de264e5b18e4809d753" title="Returns the next token that would be returned by the Next method.">Peek</a>() == <span class="stringliteral">&quot;{&quot;</span>) {
<a name="l00469"></a>00469         <span class="comment">// Consume open brace.</span>
<a name="l00470"></a>00470         st.<a class="code" href="classinfact_1_1_stream_tokenizer.html#ac6827f00a3da760e23241e890becee0c" title="Returns the next token in the token stream.">Next</a>();
<a name="l00471"></a>00471       } <span class="keywordflow">else</span> {
<a name="l00472"></a>00472         ostringstream err_ss;
<a name="l00473"></a>00473         err_ss &lt;&lt; <span class="stringliteral">&quot;VarMap&lt;vector&lt;T&gt;&gt;: &quot;</span>
<a name="l00474"></a>00474                &lt;&lt; <span class="stringliteral">&quot;error: expected &#39;{&#39; at stream position &quot;</span>
<a name="l00475"></a>00475                &lt;&lt; st.<a class="code" href="classinfact_1_1_stream_tokenizer.html#ad7c5c716ebfadf303e8d4371e6bb229b">PeekPrevTokenStart</a>() &lt;&lt; <span class="stringliteral">&quot; but found \&quot;&quot;</span>
<a name="l00476"></a>00476                &lt;&lt; st.<a class="code" href="classinfact_1_1_stream_tokenizer.html#ac72a1a4fd331f44b850d2600a68a5063">PeekPrev</a>() &lt;&lt; <span class="stringliteral">&quot;\&quot;&quot;</span>;
<a name="l00477"></a>00477         <a class="code" href="namespaceinfact.html#a746fb382cf3fd6cf656f40669d90372c" title="Reports an error encountered during parsing and/or construction of an object.">Error</a>(err_ss.str());
<a name="l00478"></a>00478       }
<a name="l00479"></a>00479 
<a name="l00480"></a>00480       vector&lt;T&gt; value;
<a name="l00481"></a>00481       <span class="keywordtype">int</span> element_idx = 0;
<a name="l00482"></a>00482       <span class="keywordflow">while</span> (st.<a class="code" href="classinfact_1_1_stream_tokenizer.html#a61ec5de244a34de264e5b18e4809d753" title="Returns the next token that would be returned by the Next method.">Peek</a>() != <span class="stringliteral">&quot;}&quot;</span>) {
<a name="l00483"></a>00483         <span class="comment">// Copy the environment, since we create fake names for each element.</span>
<a name="l00484"></a>00484         shared_ptr&lt;Environment&gt; env_ptr(<a class="code" href="classinfact_1_1_var_map_impl.html#a08a42daedfe77f8a3b80bdc59c1c0754" title="A protected method to access the environment contained by this VarMapBase instance, for the two concrete VarMap implementations, below.">Base::env</a>()-&gt;<a class="code" href="classinfact_1_1_var_map_impl.html#a130789d78a53d05d8bc081ea5b18c655">Copy</a>());
<a name="l00485"></a>00485         ostringstream element_name_oss;
<a name="l00486"></a>00486         element_name_oss &lt;&lt; <span class="stringliteral">&quot;____&quot;</span> &lt;&lt; varname &lt;&lt; <span class="stringliteral">&quot;_&quot;</span> &lt;&lt; (element_idx++)
<a name="l00487"></a>00487                          &lt;&lt; <span class="stringliteral">&quot;____&quot;</span>;
<a name="l00488"></a>00488         <span class="keywordtype">string</span> element_name = element_name_oss.str();
<a name="l00489"></a>00489 
<a name="l00490"></a>00490         env_ptr-&gt;ReadAndSet(element_name, st, element_typename_);
<a name="l00491"></a>00491         <a class="code" href="classinfact_1_1_var_map_base.html" title="A base class for a mapping from variables of a specific type to their values.">VarMapBase</a> *element_var_map =
<a name="l00492"></a>00492             env_ptr-&gt;GetVarMapForType(element_typename_);
<a name="l00493"></a>00493         <a class="code" href="classinfact_1_1_var_map.html" title="A container to hold the mapping between named variables of a specific type and their values...">VarMap&lt;T&gt;</a> *typed_element_var_map =
<a name="l00494"></a>00494             <span class="keyword">dynamic_cast&lt;</span><a class="code" href="classinfact_1_1_var_map.html" title="A container to hold the mapping between named variables of a specific type and their values...">VarMap&lt;T&gt;</a> *<span class="keyword">&gt;</span>(element_var_map);
<a name="l00495"></a>00495         T element;
<a name="l00496"></a>00496         <span class="keywordflow">if</span> (typed_element_var_map-&gt;<a class="code" href="classinfact_1_1_var_map_impl.html#a7995e8a182a980899b4a0c90eee0d110" title="Assigns the value of the specified variable to the object pointed to by the value parameter...">Get</a>(element_name, &amp;element)) {
<a name="l00497"></a>00497           value.push_back(element);
<a name="l00498"></a>00498         } <span class="keywordflow">else</span> {
<a name="l00499"></a>00499           ostringstream err_ss;
<a name="l00500"></a>00500           err_ss &lt;&lt; <span class="stringliteral">&quot;VarMap&lt;&quot;</span> &lt;&lt; <a class="code" href="classinfact_1_1_var_map_base.html#a877c8828eb0289a0f90b37a848f3a28d" title="Returns the type name of the variables of this instance.">Base::Name</a>() &lt;&lt; <span class="stringliteral">&quot;&gt;::ReadAndSet: trouble &quot;</span>
<a name="l00501"></a>00501                  &lt;&lt; <span class="stringliteral">&quot;initializing element &quot;</span> &lt;&lt; (element_idx - 1)
<a name="l00502"></a>00502                  &lt;&lt; <span class="stringliteral">&quot; of variable &quot;</span> &lt;&lt; varname;
<a name="l00503"></a>00503           <a class="code" href="namespaceinfact.html#a746fb382cf3fd6cf656f40669d90372c" title="Reports an error encountered during parsing and/or construction of an object.">Error</a>(err_ss.str());
<a name="l00504"></a>00504         }
<a name="l00505"></a>00505         <span class="comment">// Each vector element initializer must be followed by a comma</span>
<a name="l00506"></a>00506         <span class="comment">// or the final closing parenthesis.</span>
<a name="l00507"></a>00507         <span class="keywordflow">if</span> (st.<a class="code" href="classinfact_1_1_stream_tokenizer.html#a61ec5de244a34de264e5b18e4809d753" title="Returns the next token that would be returned by the Next method.">Peek</a>() != <span class="stringliteral">&quot;,&quot;</span>  &amp;&amp; st.<a class="code" href="classinfact_1_1_stream_tokenizer.html#a61ec5de244a34de264e5b18e4809d753" title="Returns the next token that would be returned by the Next method.">Peek</a>() != <span class="stringliteral">&quot;}&quot;</span>) {
<a name="l00508"></a>00508           ostringstream err_ss;
<a name="l00509"></a>00509           err_ss &lt;&lt; <span class="stringliteral">&quot;Initializer&lt;vector&lt;T&gt;&gt;: &quot;</span>
<a name="l00510"></a>00510                  &lt;&lt; <span class="stringliteral">&quot;error: expected &#39;,&#39; or &#39;}&#39; at stream position &quot;</span>
<a name="l00511"></a>00511                  &lt;&lt; st.<a class="code" href="classinfact_1_1_stream_tokenizer.html#acbafcc5e7f6a0b3e4cd8166c4a53f4a8" title="Returns the next token&rsquo;s start position, or the byte position of the underlying byte stream if there ...">PeekTokenStart</a>() &lt;&lt; <span class="stringliteral">&quot; but found \&quot;&quot;</span> &lt;&lt; st.<a class="code" href="classinfact_1_1_stream_tokenizer.html#a61ec5de244a34de264e5b18e4809d753" title="Returns the next token that would be returned by the Next method.">Peek</a>() &lt;&lt; <span class="stringliteral">&quot;\&quot;&quot;</span>;
<a name="l00512"></a>00512           <a class="code" href="namespaceinfact.html#a746fb382cf3fd6cf656f40669d90372c" title="Reports an error encountered during parsing and/or construction of an object.">Error</a>(err_ss.str());
<a name="l00513"></a>00513         }
<a name="l00514"></a>00514         <span class="comment">// Read comma, if present.</span>
<a name="l00515"></a>00515         <span class="keywordflow">if</span> (st.<a class="code" href="classinfact_1_1_stream_tokenizer.html#a61ec5de244a34de264e5b18e4809d753" title="Returns the next token that would be returned by the Next method.">Peek</a>() == <span class="stringliteral">&quot;,&quot;</span>) {
<a name="l00516"></a>00516           st.<a class="code" href="classinfact_1_1_stream_tokenizer.html#ac6827f00a3da760e23241e890becee0c" title="Returns the next token in the token stream.">Next</a>();
<a name="l00517"></a>00517         }
<a name="l00518"></a>00518       }
<a name="l00519"></a>00519       <span class="comment">// Consume close brace.</span>
<a name="l00520"></a>00520       st.<a class="code" href="classinfact_1_1_stream_tokenizer.html#ac6827f00a3da760e23241e890becee0c" title="Returns the next token in the token stream.">Next</a>();
<a name="l00521"></a>00521 
<a name="l00522"></a>00522 
<a name="l00523"></a>00523       <span class="comment">// Finally, set the newly-constructed value.</span>
<a name="l00524"></a>00524       this-&gt;<a class="code" href="classinfact_1_1_var_map_impl.html#a41079cce7547d72dec0a0e0bfbbd6d20" title="Sets the specified variable to the specified value.">Set</a>(varname, value);
<a name="l00525"></a>00525     }
<a name="l00526"></a>00526   }
<a name="l00527"></a>00527  <span class="keyword">private</span>:
<a name="l00528"></a>00528   <span class="keywordtype">string</span> element_typename_;
<a name="l00529"></a>00529 };
<a name="l00530"></a>00530 
<a name="l00531"></a>00531 }  <span class="comment">// namespace infact</span>
<a name="l00532"></a>00532 
<a name="l00533"></a>00533 <span class="preprocessor">#endif</span>
</pre></div></div><!-- contents -->
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Defines</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>



<hr class="footer"/><address class="footer"><small>
Generated on Wed Apr 23 2014 10:07:52 for InFact by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.7.6.1
</small></address>

</body>
</html>
